package br.com.gustavobhz.portalcolaborador.entidade;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.apache.tapestry5.beaneditor.NonVisual;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

@Entity
@NamedQueries(
{
        @NamedQuery(name = Usuario.POR_CREDENCIAIS, query = "Select u from Usuario u where u.nome = :nome and u.senha = :senha") })
@Table(name = "usuario")
@SQLDelete(sql = "update usuario set is_ativo = 0 where id_usuario = ?")
@Where(clause = "is_ativo = 1")
public class Usuario {
	
	public static final String POR_CREDENCIAIS = "Usuario.PorCredenciais";
	private static final long serialVersionUID = 4060967693790504175L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name = "id_usuario")
	@NonVisual
	private long id;
	
	private String nome;
	
	private String senha;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_cadastro")
	private Date dataCriacao;
	
	@Column(name = "is_ativo")
	private boolean isAtivo;
	
	@OneToOne
	@JoinColumn(name = "id_funcionario")
	private Funcionario funcionario;
	
	@Column(name = "is_administrador")
	private Boolean isAdministrador;
	
	public String getNome() {
		return nome;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public Date getDataCriacao() {
		return dataCriacao;
	}

	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public boolean isAtivo() {
		return isAtivo;
	}

	public void setAtivo(boolean isAtivo) {
		this.isAtivo = isAtivo;
	}

	public Boolean getIsAdministrador() {
		return isAdministrador;
	}

	public void setIsAdministrador(Boolean isAdministrador) {
		this.isAdministrador = isAdministrador;
	}

	public String getSimNao(){
		if(isAtivo == true) {
			return "Sim";
		}
		return "Não";
	}
	
}